package com.tedu.api.io;

import org.junit.Test;
import sun.plugin2.message.GetNameSpaceMessage;

import java.io.File;
import java.io.IOException;

/**
 * java.io
 * File   表示 文件或者文件夹【存在硬盘】
 * 测试:io包下创建文件
 * 验证项目下是否存在 demo.txt文件
 * <p>
 * 创建File文件类
 * File file=new File("传入路径")
 * 构造器:传入路径/ \表示路径
 * /  表示路径、文件的下载【下载到本地】--本地测试
 * \  表示路径、文件上传【到服务器】--网络  选他
 * File文件/文件夹类可以做什么:【常用方法】
 * 1.查看文件或者文件夹的属性信息(名字、大小、判断文件是否存在 等等等等)
 * 2.操作文件或者文件夹(创建 删除等等等等)
 * 3.访问一个目录的子项(访问文件夹下的文件夹的操作)
 */
public class FileAPI {
    @Test
    public void testFile() {
        //项目结构:C/S架构--Maven---查路径--通过idea查路径、
        //找到需要查找文件夹/右键--打开于--Explorer
        //src\main\java\com\tedu\api\io      不加斜杠报错  char c=‘\\’  转义成路径
        //编写Java代码--任何操作平台运行---路径---封装:静态属性
        //Java编写有\\ 情况---改成变成--->
        //--->File.separator 静态属性可以在任何平台上转义成对应路径
        //File file=new File("src\\main\\java\\com\\tedu\\api\\io\\/*加\\要不报错*/demo.txt");
        File file = new File("src" + File.separator + "main"
                + File.separator + "java"
                + File.separator + "com"
                + File.separator + "tedu"
                + File.separator + "api"
                + File.separator + "io"

                + File.separator +/*加\\要不报错*/"demo.txt");//真他凉的长，反正我不用
        //验证:demo.txt是否他凉的存在
        boolean b = false;//boolean类型
            b = file.exists();
        System.out.println(b);
    }

    /**
     * getName()  返回值:String 获取文件/文件夹的名字【管你file存不存在,老子只拿你的名字】
     * length()   返回值:long   返回当前文件大小(字节量)
     * exists()   返回值:boolean   判断file文件是否存在
     */
    @Test
    public void testGLE() {//查看文件或者文件夹的属性信息
        File file = new File(("src" + File.separator + "main"
                + File.separator + "java"
                + File.separator + "com"
                + File.separator + "tedu"
                + File.separator + "api"
                + File.separator + "io"
                + File.separator +/*加\\要不报错*/"demo.txt"));
        String str = file.getName();//String类型
        System.out.println("文件名字是什么："+str);
        long length=file.length();
        System.out.println("文件字节量有多少："+length);
        boolean m=file.exists();
            System.out.println(m);


    }
    /**
     * 操作文件或者文件夹(创建  删除)_
     * createNewFile创建一个新的文件[可能不成功？抛出异常  IO流]
     *
     */
    @Test
    public void testCreateNewFile() throws IOException {
        //用程序创建一个文件夹:text.txt
        File file=new File("."+File.separator+"text.txt");
        //创建ext.txt文件---判断当前文件夹下是否存在，存在不创建
                                             // 不存在创建
        if(!/*非*/file.exists()){//文件text.txt文件不存在 则创建
            System.out.println("文件不存在");
            file.createNewFile();//添加异常到方法签名，叉出去
            System.out.println("文件创建完毕");
        }else{
                System.out.println("文件存在");

        }

    }
    /**
     * 拓展:存放文件位置:Maven项目:main 程序入口
     *                         test 程序测试
     *         查找:main下或者test下,必须从src位置开始找
     *         .去找  代表当前项目下
     */
    @Test
    public void testPath() throws IOException {
        //FaleAPI.java相对于项目名"API"
        File file=new File("."+File.separator+"1"/*想在API中生成一个1的文件*/);
        //查看 file 路径
        //System.out.println(file.getCanonicalPath());//添加异常到方法签名  叉出去
        System.out.println("API项目路径文件是否存在："+file.exists());

    }
    /**文件的删除操作
     * delete()帮我们删除已经创建完毕的文件/文件夹
     */
    @Test
    public void testDelete(){
        //创建File文件  找到text文件并且删除
        File file=new File("."+File.separator+"demo");
        //有文件删除  没有不删除
        if(file.exists()){//else进行两种可能性判断
            System.out.println("文件存在");
             file.delete();
            System.out.println("文件删除");
        }else{
            System.out.println("文件不存在");
        }

    }
    /**
     * mkdir()
     * 创建单目录 在当前项目下
     * mkdirs()
     * 创建多层目录文件夹 在当前目录下
     */
    @Test
    public void testMkdir(){
        //创建demo文件夹  创建在API文件夹下     在demo下创建--新文件夹
        File file=new File("."+File.separator+"demo"+/*以此向后延续*/
               ""+ File.separator+"abc"+File.separator+"bcd"+File.separator+"cxk");
        if(!file.exists()){
            System.out.println("没有文件夹");
          //file.mkdir();创建单层目录
            file.mkdirs();
            System.out.println("创建");
        }else {
            System.out.println("有文件夹");
            System.out.println("失败");
        }
    }
    /**
     * isDirectory() 判断是否是目录  是true不false
     * isFile() 验证文件夹是否是文件
     * ListFiles()  返回值:数组  获取当前目录下所有子项[文件 文件夹]
     */
    @Test
    public void testListFiles(){
        //获取当前"API"下所有文件和文件夹
        File file=new File(".");
        //获取文件夹
        if(file.isDirectory()/*只要文件夹*/){
            //获取文件夹子项
            File[]/*数组加[]*/ files=file.listFiles();
            //打印 int i=0;i<files.length;i++
            for(int i=0;i<files.length;i++){
                System.out.println(files[i]);
            }
        }
    }
}
